#include<bits/stdc++.h>
#define ll long long
using namespace std;

vector<int>c[100005];
int pw[100005],n,m,k,a0[100005],a[100005],d[25][25],f[100005],sta[270005],ch[5];

void sol()
{
    for(int i=0;i<4;i++) cin>>ch[i];
    for(int i=1;i<=n;i++) a[i]=a0[i]^ch[i%4];
    memset(f,0,sizeof(f));
    for(int i=1;i<=pw[n];i++) sta[i+pw[n]-1]=i;
    for(int i=pw[n]*2-1;i;i--) sta[i/2]+=sta[i];
    int t=log2(pw[n]);
    for(int i=1;i<=n;i++)
    {
        // for(int i=1;i<=pw[n]*2-1;i++)cerr<<sta[i]<<' ';cerr<<endl;
        int x=i+pw[n]-1,j=1;
        while(x)
        {
            int p=(x-(1ll<<t-j+1)+2)/2;
            // cerr<<"D: "<<x<<' '<<t<<' '<<j<<' '<<p<<endl;
            if(~x&1)
            {
                if(!d[j][p])
                {
                    if(a[i]<j) sta[x/2]-=i;
                }
            }
            else
            {
                if(d[j][p])
                {
                    if(a[i]<j) sta[x/2]-=i;
                }
            }
            if((1<<j-1)==pw[i]) f[i]=sta[x];//,cerr<<i<<':'<<f[i]<<endl;
            x/=2;
            j++;
        }
    }
    ll ans=0;
    for(int i=1;i<=n;i++)
    {
        for(auto j:c[i])
        {
            ans^=j*1ll*f[i];
        }
    }
    cout<<ans<<endl;
}

int main()
{
    freopen("arena.in","r",stdin);
    freopen("arena.out","w",stdout);
    ios::sync_with_stdio(0);
    cin>>n>>m;
    for(int i=1;i<=n;i++) cin>>a0[i];
    for(int i=2;i<=n;i++)
    {
        pw[i]=pw[i-1];
        while((1ll<<pw[i])<i) pw[i]++;
    }
    for(int i=1;i<=m;i++)
    {
        int x;
        cin>>x;
        c[x].push_back(i);
    }
    k=pw[n];
    for(int i=1;i<=k;i++)
    {
        for(int j=1;j<=(1<<k-i);j++)
        {
            char c;
            cin>>c;
            d[i][j]=c-48;
        }
    }
    for(int i=1;i<=n;i++) pw[i]=1ll<<pw[i];
    int t;
    cin>>t;
    while(t--) sol();
    return 0;
}
// Code by Jorisy. Best Wishes & Good Luck.
// I hope to make it miracle, but no results.
// Sorry, maybe I will get 100+100+50+0.